package Q10_10_Rank_from_Stream; public class RankNode { public int left_size = 0; public RankNode left; public RankNode right; public int data = 0; public RankNode(int d) { data = d; } public void insert(int d) { if (d <= data) { if (left != null) { left.insert(d); } else { left = new RankNode(d); } left_size++; } else { if (right != null) { right.insert(d); } else { right = new RankNode(d); } } } public int getRank(int d) { if (d == data) { return left_size; } else if (d < data) { if (left == null) { return -1; } else { return left.getRank(d); } } else { int right_rank = right == null ? -1 : right.getRank(d); if (right_rank == -1) { return -1; } else { return left_size + 1 + right_rank; } } } }